package com.zs.propertymanage.mapper;

import com.zs.propertymanage.dataObj.entity.PatrolPlan;
import com.zs.propertymanage.dataObj.entity.PatrolTask;
import org.apache.ibatis.annotations.Mapper;

import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

@Mapper
public interface PatrolMapper {
    //任务

    /**
     * 根据频率获取任务列表
     *
     * @param frequency 频率代码 0-其他 1-日 2-周 3-月 4-季 5-年
     * @return 指定频率的任务计划列表
     */
    List<PatrolPlan> getPatrolPlanListByFrequency(Integer frequency);

    /**
     * 添加任务
     *
     * @param patrolTask 任务实体
     */
    int addPatrolTask(PatrolTask patrolTask);

    /**
     * 获取巡查任务列表
     *
     * @param search   搜索参数
     * @param start    起始位置
     * @param pageSize 页大小
     * @return 任务列表
     */
    List<PatrolTask> getPatrolTask(String search, Integer start, Integer pageSize);

    /**
     * 获取巡查任务数量
     *
     * @param search 搜索参数
     * @return 巡查任务数量
     */
    Integer getPatrolTaskCount(String search);

    /**
     * 根据任务ID获取任务
     *
     * @param id 任务ID
     * @return 任务实体
     */
    PatrolTask getPatrolTaskById(String id);

    /**
     * 更新任务
     *
     * @param patrolTask 任务实体
     * @return 更新结果
     */
    int updatePatrolTask(PatrolTask patrolTask);

    /**
     * 根据员工id获取任务列表
     *
     * @param employeeId 员工id
     * @param search     搜索参数
     * @param start      起始位置
     * @param pageSize   页大小
     * @return 任务列表
     */
    List<PatrolTask> getPatrolTaskByEmployeeId(String employeeId, String search, int start, Integer pageSize);

    /**
     * 获取巡查任务数量
     *
     * @param employeeId 员工id
     * @param search     搜索参数
     * @return 巡查任务数量
     */
    Integer getPatrolTaskCountByEmployeeId(String employeeId, String search);

    /**
     * 根据员工id获取指定完成状态的巡检任务数量
     *
     * @param employeeId     员工id
     * @param completeStatus 完成状态 0-未完成 1-已完成
     * @return 数量
     */
    Integer getCountOfEmployeeByCompleteStatus(String employeeId, Integer completeStatus);


    // 计划

    /**
     * 获取巡查计划列表
     *
     * @param search   搜索参数
     * @param start    起始位置
     * @param pageSize 页大小
     * @return 计划列表
     */
    List<PatrolPlan> getPatrolPlan(String search, Integer start, Integer pageSize);

    /**
     * 获取巡查计划数量
     *
     * @param search 搜索参数
     * @return 计划数量
     */
    Integer getPatrolPlanCount(String search);

    /**
     * 添加巡查计划
     *
     * @param patrolPlan 计划实体
     * @return 添加结果
     */
    int addPatrolPlan(PatrolPlan patrolPlan);

    /**
     * 根据id删除巡查计划
     *
     * @param id 计划id
     * @return 处理结果
     */
    int deletePatrolPlan(String id);

    /**
     * 更新巡查计划
     *
     * @param patrolPlan 计划实体
     * @return 处理结果
     */
    int updatePatrolPlan(PatrolPlan patrolPlan);

    // 根据任务计划id，获取职责人员列表
    List<Map<String, String>> getPatrolPlanDuty(String planId);

    // 为巡查计划设置职责人员
    int setPatrolPlanDuty(List<Map<String, String>> dutyList);

    // 删除巡查计划的职责人员
    void deletePatrolPlanDuty(String planId);

    Integer getTotal();

    List<PatrolTask> getWithDateTimeRange(LocalDateTime start, LocalDateTime end);
}
